package com.baizhi.exception;

import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 非restful风格的全局异常处理
 */
@Configuration
public class GlobalExceptionResolver implements HandlerExceptionResolver{
    //resolveExcpetion: 当控制器中任意一个方法出现异常时,如果该控制器的方法没有自己异常处理(try...catch),则会进入当前方法
    //注意:在异常处理这个方法中 完成自定义异常处理
    //参数1: request 当前请求对象
    //参数2: response 当前请求对应响应对象
    //参数3: 当前出现错误的方法对象
    //参数4: 出现异常的异常对象
    //返回值: modelAndview 模型和视图

    /**
     * 打印异常信息
     * 针对不同类型返回不同的错误页面，
     * 比如用户名不存在的异常就返回500，否则则返回到默认的erro页面
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView mav = new ModelAndView();
        if (ex instanceof UserNameNotFoundException) {
            mav.setViewName("500");
            return mav;
        }

        mav.setViewName("error");
        return mav;
    }
}
